table of contents
INITDB(1) | PostgreSQL 9.2.24 Documentation | INITDB(1) |
NAME¶
initdb - create a new PostgreSQL database cluster
SYNOPSIS¶
initdb [option...] [--pgdata | -D] directory
DESCRIPTION¶
initdb creates a new PostgreSQL database cluster. A database cluster is a collection of databases that are managed by a single server instance.
Creating a database cluster consists of creating the directories in which the database data will live, generating the shared catalog tables (tables that belong to the whole cluster rather than to any particular database), and creating the template1 and postgres databases. When you later create a new database, everything in the template1 database is copied. (Therefore, anything installed in template1 is automatically copied into each database created later.) The postgres database is a default database meant for use by users, utilities and third party applications.
Although initdb will attempt to create the specified data directory, it might not have permission if the parent directory of the desired data directory is root-owned. To initialize in such a setup, create an empty data directory as root, then use chown to assign ownership of that directory to the database user account, then su to become the database user to run initdb.
initdb must be run as the user that will own the server process, because the server needs to have access to the files and directories that initdb creates. Since the server cannot be run as root, you must not run initdb as root either. (It will in fact refuse to do so.)
initdb initializes the database cluster's default locale and character set encoding. The character set encoding, collation order (LC_COLLATE) and character set classes (LC_CTYPE, e.g. upper, lower, digit) can be set separately for a database when it is created. initdb determines those settings for the template1 database, which will serve as the default for all other databases.
To alter the default collation order or character set classes, use the --lc-collate and --lc-ctype options. Collation orders other than C or POSIX also have a performance penalty. For these reasons it is important to choose the right locale when running initdb.
The remaining locale categories can be changed later when the server is started. You can also use --locale to set the default for all locale categories, including collation order and character set classes. All server locale values (lc_*) can be displayed via SHOW ALL. More details can be found in Section 22.1, “Locale Support”, in the documentation.
To alter the default encoding, use the --encoding. More details can be found in Section 22.3, “Character Set Support”, in the documentation.
OPTIONS¶
-A authmethod, --auth=authmethod
--auth-host=authmethod
--auth-local=authmethod
-D directory, --pgdata=directory
-E encoding, --encoding=encoding
--locale=locale
--lc-collate=locale, --lc-ctype=locale, --lc-messages=locale, --lc-monetary=locale, --lc-numeric=locale, --lc-time=locale
--no-locale
--pwfile=filename
-T CFG, --text-search-config=CFG
-U username, --username=username
-W, --pwprompt
-X directory, --xlogdir=directory
Other, less commonly used, options are also available:
-d, --debug
-L directory
-n, --noclean
Other options:
-s, --show
-V, --version
-?, --help
ENVIRONMENT¶
PGDATA
TZ
This utility, like most other PostgreSQL utilities, also uses the environment variables supported by libpq (see Section 31.14, “Environment Variables”, in the documentation).
NOTES¶
initdb can also be invoked via pg_ctl initdb.
SEE ALSO¶
2017-11-06 | PostgreSQL 9.2.24 |